/*
 * OyenteBase.java	
 *
 * Copyright 2009 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 05/10/09, 11:23:38 AM
 */

package com.ufps.cuatro.util.base;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * <i><b>OyenteBase:</b></i> Encapsula los Oyentes Registrados a un Objecto
 * de la Interfaz Gráfica.
 *
 * @author  Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 05/10/09
 * @see Serializable 
 * @see Cloneable
 * @see Comparable
 */
public class OyenteBase extends ObjectBase{
    private static final long serialVersionUID = -8596459883395075793L;    
    
    /**
     * Nombre del Oyente.
     */
    protected String strNombre;
    /**
     * Nombre del Paquete.
     */
    protected String strPaquete;
    /**
     * Nombre de la Clase Adaptadora (si aplica).
     */
    protected String strClaseAdaptadora;
    /**
     * Nombre la Interfaz.
     */
    protected String strInterfaz;
    /**
     * Nombre de la Acción.
     */
    protected String strAccion;
    /**
     * Variable de Evento.
     */
    protected String strVar;
    /**
     * Mensaje informativo asociado al Oyente.
     */
    protected String strToolTips;
    
    private ArrayList<EventoBase> objEventosBase;
    private ArrayList<MetodoBase> objMetodosBase;

    /**
     * Constructor por Defecto.
     */
    public OyenteBase() {
        this.objEventosBase = new ArrayList<EventoBase>();
        this.objMetodosBase = new ArrayList<MetodoBase>();
    }

    /**
     * Constructor utilizado en la Implementación.
     * @param id Indice de definición en el Archivo de Propiedades.
     * @param strNombre  Nombre del Oyente.
     * @param strPaquete Nombre del Paquete.
     * @param strClaseAdaptadora Nombre de la Clase Adaptadora (si aplica).
     * @param strAccion Nombre de la Acción.
     * @param strInterfaz Nombre la Interfaz.
     * @param strVar Variable de Evento.
     * @param strToolTips Mensaje informativo asociado al Oyente.
     */
    public OyenteBase(int id, String strNombre, String strPaquete, String strClaseAdaptadora, String strInterfaz, String strAccion, String strVar, String strToolTips) {
        this.id = id;
        this.strNombre = strNombre;
        this.strPaquete = strPaquete;
        this.strClaseAdaptadora = strClaseAdaptadora;
        this.strInterfaz = strInterfaz;
        this.strAccion = strAccion;
        this.strVar = strVar;
        this.strToolTips = strToolTips;
        this.objEventosBase = new ArrayList<EventoBase>();
        this.objMetodosBase = new ArrayList<MetodoBase>();
    }    
    
    /**
     * Devuelve los Eventos registrados en el Oyento.
     * @return Eventos registrados en el Oyento.
     */
    public ArrayList<EventoBase> getObjEventosBase() {
        return objEventosBase;
    }

    /**
     * Establece los Eventos registrados en el Oyento.
     * @param objEventosBase Eventos registrados en el Oyento.
     */
    public void setObjEventosBase(ArrayList<EventoBase> objEventosBase) {
        this.objEventosBase = objEventosBase;
    }

    /**
     * Devuelve los Métodos de Utileria del OyenteBase.
     * @return Métodos de Utileria del OyenteBase.
     */
    public ArrayList<MetodoBase> getObjMetodosBase() {
        return objMetodosBase;
    }

    /**
     * Establece los Métodos de Utileria del OyenteBase.
     * @param objMetodosBase Métodos de Utileria del OyenteBase.
     */
    public void setObjMetodosBase(ArrayList<MetodoBase> objMetodosBase) {
        this.objMetodosBase = objMetodosBase;
    }

    /**
     * Devuelve la Accion asociada al Oyente. 
     * @return Accion asociada al Oyente. 
     */
    public String getStrAccion() {
        return strAccion;
    }

    /**
     * Establece la Accion asociada al Oyente. 
     * @param strAccionEvento Accion asociada al Oyente. 
     */
    public void setStrAccion(String strAccionEvento) {
        this.strAccion = strAccionEvento;
    }

    /**
     * Devuelve la Clase Adaptadora.
     * @return Clase Adaptadora.
     */
    public String getStrClaseAdaptadora() {
        return strClaseAdaptadora;
    }

    /**
     * Establece la clase Adaptadora.
     * @param strClaseAdaptadora Clase Adaptadora.
     */
    public void setStrClaseAdaptadora(String strClaseAdaptadora) {
        this.strClaseAdaptadora = strClaseAdaptadora;
    }

    /**
     * Deveulve la Interfaz Implementada por el Oyente.
     * @return Interfaz Implementada por el Oyente.
     */
    public String getStrInterfaz() {
        return strInterfaz;
    }

    /**
     * Establece la Interfaz a Implementar por el Oyente.
     * @param strInterfaz Interfaz Implementada por el Oyente.
     */
    public void setStrInterfaz(String strInterfaz) {
        this.strInterfaz = strInterfaz;
    }

    /**
     * Devuelve el Nombre del Oyente.
     * @return Nombre del Oyente.
     */
    public String getStrNombre() {
        return strNombre;
    }

    /**
     * Establece el Nombre del Oyente.
     * @param strNombre Nombre del Oyente.
     */
    public void setStrNombre(String strNombre) {
        this.strNombre = strNombre;
    }

    /**
     * Devuelve el Paquete del Oyente.
     * @return Paquete del Oyente.
     */
    public String getStrPaquete() {
        return strPaquete;
    }

    /**
     * Establece el Paquete del Oyente.
     * @param strPaquete Paquete del Oyente.
     */
    public void setStrPaquete(String strPaquete) {
        this.strPaquete = strPaquete;
    }

    /**
     * Devuelve el Nombre de la Variable Asociada a los Eventos del Oyente.
     * @return Nombre de la Variable Asociada a los Eventos del Oyente.
     */
    public String getStrVar() {
        return strVar;
    }

    /**
     * Establece el Nombre de la Variable Asociada a los Eventos del Oyente.
     * @param strVar Nombre de la Variable Asociada a los Eventos del Oyente.
     */
    public void setStrVar(String strVar) {
        this.strVar = strVar;
    }

    /**
     * Devuelve la Cadena de Definición del Evento pasado en el Parametro.
     * @param objEvento Evento pasado en el Parametro.
     * @return Cadena de Definición del Evento pasado en el Parametro.
     */
    public String getDefinicion(EventoBase objEvento){
       try{
        return "private void " + objEvento.getStrNombre()
                + "(" + getStrAccion() + " " + getStrVar() + ")";
        }catch(java.lang.NullPointerException ex){}
        return "";
    }

    /**
     * Devuelve la cadena de Definición del Evento pasado en el Parametro.
     * @param i Indice en la Colección de Eventos Registrados.
     * @return Cadena de Definición del Evento pasado en el Parametro.
     */
    public String getDefinicion(int i){
        try{
        return this.getDefinicion(this.objEventosBase.get(i));
    }catch(java.lang.IndexOutOfBoundsException ex){}
        return "";
    }

    /**
     * Devuelve el Mensaje de información ó Ayuda asociado al Oyente.
     * @return Mensaje de información ó Ayuda asociado al Oyente.
     */
    public String getStrToolTips() {
        return strToolTips;
    }

    /**
     * Establece el Mensaje de información ó Ayuda asociado a la Clase.
     * @param strToolTips Mensaje de información ó Ayuda asociado al Oyente.
     */
    public void setStrToolTips(String strToolTips) {
        this.strToolTips = strToolTips;
    }    

    @Override
    public String toString() {
        return this.strNombre;
    }

    @Override
    public int compareTo(Object o) {
       try{
        OyenteBase obj = (OyenteBase) o;
        if(this.id > obj.id)
            return 1;
        else if(this.id < obj.id)
            return -1;
        else
            return 0;
    }catch(java.lang.NullPointerException ex){}
       return 0;
    }
}
